package com.cencat.common.annotation;

import java.lang.annotation.*;

/**
 * 权限校验注解
 * 标记在方法或类上，进行权限校验
 * 
 * @author cencat
 * @since 2024-01-01
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequirePermission {
    
    /**
     * 权限码
     * @return 权限码数组
     */
    String[] value() default {};
    
    /**
     * 权限逻辑关系
     * @return 逻辑关系
     */
    Logical logical() default Logical.AND;
    
    /**
     * 权限描述
     * @return 权限描述
     */
    String description() default "";
    
    /**
     * 逻辑关系枚举
     */
    enum Logical {
        /** 且关系：需要同时拥有所有权限 */
        AND,
        /** 或关系：只需拥有其中一个权限 */
        OR
    }
}